跳至正文

開發前綴:get、find、fetch、load、retrieve - 理解差異和使用規則

  • 在使用程式語言時,getfindfetchloadretrieve等前綴經常用於方法或函數名稱中。它們通常在從資料庫、外部檔案或API檢索資料時使用
  • 在開發過程中,我希望編寫具有一致性的程式碼,因此對這些前綴的差異和使用場景產生了好奇。我研究了這些前綴的差異和使用場景。
  • 命名慣例可能因公司或開發人員而異。在這種情況下,我試圖找到常用的規則,但實際上,它們可能會根據使用場景而有所不同。
  • 雖然這些前綴看起來可能相似,但每個都有略微不同的含義和使用上下文。讓我們探討它們的差異。
  • 我沒有在大公司使用既定的開發慣例進行開發的經驗,因此我在這個主題上的知識有些有限。內容可能不完全準確,因此請僅作為參考閱讀。

1. get

get前綴通常用於檢索或存取特定值。這意味著該操作返回單個結果或集合中的特定項目。例如:

  • getUser() - 檢索單個使用者物件。
  • getProductById(id) - 檢索與提供的ID對應的產品物件。
  • getUsers() - 檢索所有使用者物件。

2. find

find前綴通常用於搜尋和尋找與某些條件匹配的項目或多個項目。與get的區別在於,find似乎更側重於搜尋和尋找。這意味著該操作返回多個結果或項目的集合。例如:

  • findUsersByRole(role) - 尋找具有特定角色的所有使用者。
  • findProductsByCategory(category) - 尋找屬於特定類別的所有產品。
  • findUsersByAge(age) - 尋找特定年齡的所有使用者。

2.1. find vs get

  • 雖然這不是正式定義的,但根據網際網路上各種人的討論,findget之間的差異如下:
    • get:側重於檢索明確確定的內容。返回單個結果或項目,通常不用於可能沒有結果的情況。
    • find:側重於搜尋和尋找。返回多個結果或項目的集合,搜尋結果可能為空。
  • 部落格文章How do you use "find" vs "get" prefix?中的範例可以幫助理解這個概念。以下是該文章中的範例:
    • getOneById:如果該ID沒有結果,則拋出錯誤。
    • findOneById:如果該ID沒有結果,則返回null。
public async getOneById(id: number): Promise<User> {
const user = await this.userRepository
.createQueryBuilder("u")
.where("u.id = :id", {id})
.getOne();

if (!user)
throw new Error(`User with ID "${id.toString()}" not found.`);

return user;
}
public async findOneById(id: number): Promise<User> {
const user = await this.userRepository
.createQueryBuilder("u")
.where("u.id = :id", {id})
.getOne();

return user;
}

3. fetch vs load vs retrieve

  • fetchloadretrieve前綴是用於檢索資料的其他前綴。它們主要用於從網路或資料庫獲取資料。雖然它們的差異不太明確,但通常使用如下:
    • fetch:用於從網路檢索資料。主要與API呼叫相關。
    • load:通常用於檢索外部資料,例如資料庫或來自S3的檔案資料。
    • retrieve:用於檢索資料。使用頻率似乎低於fetchload

4. 總結

  • get用於檢索單個結果或項目,而find用於搜尋多個結果或項目。
  • fetchloadretrieve用於檢索資料。fetch用於從網路檢索資料,load用於檢索資料庫或檔案資料,retrieve用於檢索資料。
    • 但是,fetchloadretrieve的使用頻率低於getfind,並且區別相對不太明確。
  • 這些前綴是一般使用規則,實際上,它們可能會根據使用位置、程式語言或框架而有所不同。為了準確使用,請參考專案特定的文件或編碼標準。

參考文獻